package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Objects;

import lombok.Data;

/**
 * @desc PlanningExportDetailDto
 * @使用场景
 */
@Data
public class PlanningExportDetailDto extends BaseDto implements Serializable {

  /**
   * 指标ID
   */
  @ApiModelProperty("指标ID")
  private String objectiveId;

  /**
   * 被评对象目标周期ID
   */
  @ApiModelProperty("被评对象目标周期ID")
  private String evaObjTargetCycleId;

  /**
   * 评价模板名称
   */
  @ApiModelProperty("评价模板名称")
  private String evaluationTempName;

  /**
   * 一级目标分类名称
   */
  @ApiModelProperty("一级目标分类名称")
  private String rootTargetCategoryName;

  /**
   * 末级目标分类名称
   */
  @ApiModelProperty("末级目标分类名称")
  private String lastTargetCategoryName;

  /**
   * 指标简称
   */
  @ApiModelProperty("指标简称")
  private String objectiveShortName;

  /**
   * 虚拟组织下部门ID
   */
  @ApiModelProperty("虚拟组织下部门ID")
  private String deptId;

  /**
   * 负责人就职记录ID
   */
  @ApiModelProperty("负责人就职记录ID")
  private String personLiableInductionRecordId;

  /**
   * 主管就职记录ID
   */
  @ApiModelProperty("主管就职记录ID")
  private String directorInductionRecordId;

  /**
   * 部门简称
   */
  @ApiModelProperty("责任部门简称")
  private String deptShortName;

  /**
   * 负责人姓名
   */
  @ApiModelProperty("负责人姓名")
  private String personLiableIdCardName;

  /**
   * 主管姓名
   */
  @ApiModelProperty("主管姓名")
  private String directorIdCardName;

  /**
   * 展示目标值
   */
  @ApiModelProperty("展示目标值")
  private Double showTargetValue;

  /**
   * 冗余单位
   */
  @ApiModelProperty("目标值单位")
  private String unit;

  /**
   * 实际值（数值）
   */
  @ApiModelProperty("实际值（数值）")
  private Double actualValue;

  /**
   * 实际值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:1111百分率 PORTION:份 %:%
   */
  @ApiModelProperty("实际值单位")
  private String actualValueUnit;

  /**
   * 进度值（数值）
   */
  @ApiModelProperty("进度值（数值）")
  private Double progressValue;

  /**
   * 进度值单位
   */
  @ApiModelProperty("进度值单位")
  private String progressValueUnit;

  /**
   * 关联目标内容ID
   */
  @ApiModelProperty("关联目标内容ID")
  private String targetCycleContentId;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    PlanningExportDetailDto that = (PlanningExportDetailDto) o;
    return (
      objectiveId == that.objectiveId &&
      evaObjTargetCycleId == that.evaObjTargetCycleId &&
      evaluationTempName == that.evaluationTempName &&
      rootTargetCategoryName == that.rootTargetCategoryName &&
      lastTargetCategoryName == that.lastTargetCategoryName &&
      objectiveShortName == that.objectiveShortName &&
      deptId == that.deptId &&
      personLiableInductionRecordId == that.personLiableInductionRecordId &&
      directorInductionRecordId == that.directorInductionRecordId &&
      deptShortName == that.deptShortName &&
      personLiableIdCardName == that.personLiableIdCardName &&
      directorIdCardName == that.directorIdCardName &&
      showTargetValue == that.showTargetValue &&
      unit == that.unit &&
      actualValue == that.actualValue &&
      actualValueUnit == that.actualValueUnit &&
      progressValue == that.progressValue &&
      progressValueUnit == that.progressValueUnit &&
      targetCycleContentId == that.targetCycleContentId
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      objectiveId,
      evaObjTargetCycleId,
      evaluationTempName,
      rootTargetCategoryName,
      lastTargetCategoryName,
      objectiveShortName,
      deptId,
      personLiableInductionRecordId,
      directorInductionRecordId,
      deptShortName,
      personLiableIdCardName,
      directorIdCardName,
      showTargetValue,
      unit,
      actualValue,
      actualValueUnit,
      progressValue,
      progressValueUnit,
      targetCycleContentId
    );
  }

}
